package com.example.demo.dto;

public class ApiResponse<T> {
    private int status;
    private String message;
    private T data;

    // 构造方法
    public ApiResponse(int status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    /* 新增多个重载方法，覆盖不同参数组合 */

    // 最基础的静态工厂方法（需明确指定所有参数）
    public static <T> ApiResponse<T> create(int status, String message, T data) {
        return new ApiResponse<>(status, message, data);
    }

    // ------------------------ Success 系列方法 ------------------------
    // 默认成功状态码为 200，允许自定义 message 和 data
    public static <T> ApiResponse<T> success(int status, String message, T data) {
        return create(status, message, data);
    }

    // 自定义 message 和 data（状态码默认 200）
    public static <T> ApiResponse<T> success(String message, T data) {
        return success(200, message, data);
    }

    // 仅传入 data（状态码 200，message 为 "Success"）
    public static <T> ApiResponse<T> success(T data) {
        return success(200, "Success", data);
    }

    // 仅传入 message（状态码 200，data 为 null）
    public static <T> ApiResponse<T> success(String message) {
        return success(200, message, null);
    }

    // ------------------------ Error 系列方法 ------------------------
    // 必须明确指定状态码和错误信息，允许携带数据
    public static <T> ApiResponse<T> error(int status, String message, T data) {
        return create(status, message, data);
    }

    // 仅传入状态码和错误信息（data 为 null）
    public static <T> ApiResponse<T> error(int status, String message) {
        return error(status, message, null);
    }

    // Getter 方法
    public int getStatus() { return status; }
    public String getMessage() { return message; }
    public T getData() { return data; }
}